Crate embedded_sdmmc

source ·
Expand description

embedded-sdmmc

An SD/MMC Library written in Embedded Rust

This crate is intended to allow you to read/write files on a FAT formatted SD card on your Rust Embedded device, as easily as using the SdFat Arduino library. It is written in pure-Rust, is #![no_std] and does not use alloc or collections to keep the memory footprint low. In the first instance it is designed for readability and simplicity over performance.

Using the crate

You will need something that implements the BlockDevice trait, which can read and write the 512-byte blocks (or sectors) from your card. If you were to implement this over USB Mass Storage, there’s no reason this crate couldn’t work with a USB Thumb Drive, but we only supply a BlockDevice suitable for reading SD and SDHC cards over SPI.

let sdcard = embedded_sdmmc::SdCard::new(sdmmc_spi, sdmmc_cs, delayer);
println!("Card size {} bytes", sdcard.num_bytes()?);
let mut volume_mgr = VolumeManager::new(sdcard, time_source);
println!("Card size is still {} bytes", volume_mgr.device().num_bytes()?);
let mut volume0 = volume_mgr.get_volume(embedded_sdmmc::VolumeIdx(0))?;
println!("Volume 0: {:?}", volume0);
let root_dir = volume_mgr.open_root_dir(&volume0)?;
let mut my_file = volume_mgr.open_file_in_dir(
    &mut volume0, &root_dir, "MY_FILE.TXT", embedded_sdmmc::Mode::ReadOnly)?;
while !my_file.eof() {
    let mut buffer = [0u8; 32];
    let num_read = volume_mgr.read(&volume0, &mut my_file, &mut buffer)?;
    for b in &buffer[0..num_read] {
        print!("{}", *b as char);
    }
}
volume_mgr.close_file(&volume0, my_file)?;
volume_mgr.close_dir(&volume0, root_dir);

Features

  • defmt-log: By turning off the default features and enabling the defmt-log feature you can configure this crate to log messages over defmt instead.

Make sure that either the log feature or the defmt-log feature is enabled.

Re-exports

Modules

  • Block Device support
  • embedded-sdmmc-rs - FAT16/FAT32 file system implementation
  • embedded-sdmmc-rs - Generic File System structures
  • The SD/MMC Protocol

Structs

  • A VolumeManager wraps a block device and gives access to the volumes within it.
  • Represents a partition with a filesystem within it.
  • A VolumeIdx is a number which identifies a volume (or partition) on a disk. VolumeIdx(0) is the first primary partition on an MBR partitioned disk.
  • A VolumeManager wraps a block device and gives access to the volumes within it.

Enums

  • Represents all the ways the functions in this crate can fail.
  • This enum holds the data for the various different types of filesystems we support.